import router from "@/router";
import store from "@/store";
// 白名单
const whiteList = ["/login"];
/**
 * 全局前置守卫：在跳转之前被激活的全局守卫
 */
router.beforeEach(async (to, from, next) => {
  // to:你要到哪个路由 from：你从哪个路由来的 next：你是否要跳转到当前路由

  // 已登录 ，进入主页或者其他页面
  if (store.getters.token) {
    // 快捷访问
    if (to.path === "/login") {
      next("/");
    } else {
      // 判断用户资料是否获取
      // 若不存在用户信息，则需要获取用户信息
      if (!store.getters.hasUserInfo) {
        // 触发获取用户信息的 action，并获取用户当前权限
        const { permission } = await store.dispatch("user/getUserInfo");
        // 处理用户权限，筛选出需要添加的权限
        const filterRoutes = await store.dispatch(
            "permission/filterRoutes",
            permission.menus
        );
        // 利用 addRoute 循环添加
        filterRoutes.forEach((item) => {
          router.addRoute(item);
        });
        // 添加完动态路由之后，需要在进行一次主动跳转。因为只有进行了这次主动跳转，添加的路由才会生效。
        return next(to.path);
      }
      next();
    }
  } else {
    // 未登录，可以进入白名单
    if (whiteList.indexOf(to.path) > -1) {
      next(); // 正常跳转
    } else {
      next("/login");
    }
  }
});
